1. Field of the Invention
A portion of the disclosure of this patent document contains material which is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the patent and trademark office, patent file or records, but otherwise reserves all copyrights whatsoever.
The invention relates to software and the control of a telecommunications switching system. More particularly, it relates to a method for dynamic modification of addressing information within such a system.
2. Description of Related Art
Contemporary telecommunications switching systems employing stored program control operation generally utilize one or more computers to control the various functions within the system. In the organization of such conventional stored program control telecommunications exchanges, it is known to divide up each exchange into individual function blocks so that a limited number of functions are performed by each block. Therefore, the interworking between different blocks requires the simplest possible interfaces with as few signalling circuits as possible. Dividing the software for controlling such exchanges into discrete function blocks results in frequent interaction between those blocks through the exchange of software signals controlling the flow of both instructions and data within the system. A function block oriented stored program control telecommunications exchange is disclosed in Hundal U.S. Pat. No. 3,969,701.
In general, the problems associated with the linking and loading of discrete software modules into computer systems is also present in stored program control telecommunication exchanges. Among these problem are those associated with storing of the program modules in main memory, referred to as loading, and the combining of sub-program modules into a composite program, referred to as linking. The general principle associated with these issues are discussed in an article entitled "Linkers and Loaders," Leon Presser and John White, Computing Surveys, Vol. 4, September 1972.
The basic concept involves the requirement that interlinking program modules must contain accurate addresses within them in order to access other parts of related program modules necessary for proper operation. When a particular program module is removed from memory and later reloaded, it may be placed in a different memory location than it occupied during its previous residence. Therefore, prior to loading the module, there must be some mechanism for providing a reference to the specific instructions within the program so that those instructions can be located by the other modules of the program.
In addition, program modules forming part of the operating program of the telecommunication exchange are frequently modified or enhanced to provide additional functions or efficiencies, thus modifying the interactions with other program modules. In modifying program modules, it is usually necessary to add and delete portions of the instructions within that module in order to accomplish the objective of the modification. These actions require that the addresses within the specific modules and the individual modified components thereof, be properly accounted for when they are reloaded into the system for execution.
The process of storing translated or compiled programs into the main memory of a computer for execution is generally known as loading. The loading of program instructions into the main memory from other, secondary memory sources or locations is a necessary prerequisite to execution of the software. Problems have resulted because of the fact that some programs are too large to be fully loaded into the main memory and, therefore, require portions of the program to be swapped in and out of memory during execution. Problems have also resulted from the fact that programs are not always loaded back into the precise absolute address space each time they are executed; therefore, the addresses for symbols within a particular program module or block must be recalculated each time the block is executed.
A related concept is known as linking. Linking involves the combination of subprograms into a composite program and has been accepted as a valuable tool in modern operating systems in which modular software plays a vital part. Linking can, in theory, be accomplished at any one of seven different times: at source code generation time; after code generation but before compilation or translation; at compilation or translation time, after translation but before loading; at loading; after loading but before execution; or at execution. Widely-known systems such as the IBM System/360 and the UNIVAC 9400 perform linking after translation but before loading. Many existing systems also perform linking, at load time, but performing the operations in conjunction with one another limits the flexibility available when the two operations are performed separately. Although the possibility of linking at execution time has been recognized, this approach, known as segmentation, has been believed to have numerous problems associated with it such as higher overhead costs and the need for the hardware and software to be highly integrated.
One way of handling the management of addressing information within the components of modular software is by providing a global signal distribution table which is loaded with the global signal numbers associated with certain types of signals within the software along with the local signal numbers of corresponding jobs within the particular module being loaded into the software. This enables each global signal number or external reference to call for a global signal number to be cross-referenced in the global signal number distribution table to locate the local signal number within a particular software block prior to loading that signal into a job buffer of the processor for transfer to another block of the software.
While such a technique of linking processes within and among individual software blocks and interlinking addresses within the various software modules of a program is effective, it includes certain inherent disadvantages. One of these disadvantages is that after a revised block is re-loaded into the system, the processing of signals placed in the job buffer before the modification of the software block can no longer be accurately performed because the local signal numbers associated with the modified block may have been changed when the block was reloaded and the global signal distribution table rewritten. Therefore, whenever a module of a program has been modified and must be reloaded, all information within the job buffer must be purged and then reloaded. In addition, when the contents of the global signal distribution table have been changed due to unloading and reloading of a modified software block, it can lead to the inadvertent use of an old local signal number in the job buffer which results in the execution of an incorrect instruction address if another signal has been allocated to this local signal number in the new version of the reloaded block or module. Further, the software user will receive no error notification when this occurs because the software is unable to recognize that the instruction address is incorrect. This can result in corrupted output if the block is able to be executed fully.
The method and system of the present invention overcomes these and other disadvantages and provides an enhanced level of speed and reliability within modular software systems by dynamically linking addresses within the software as the individual software modules are executed.